{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# LaserBeam Attack\n",
    "The main objective of this notebook is to present an attack on a neural network using a laser.\n",
    "LaserBeam attack presented in this \n",
    "[paper](https://openaccess.thecvf.com/content/CVPR2021/papers/Duan_Adversarial_Laser_Beam_Effective_Physical-World_Attack_to_DNNs_in_a_CVPR_2021_paper.pdf) is based on the following idea. \n",
    "Image of the laser beam is generated and then added to the attacked image. \n",
    "Laser beam is described by four parameters: wavelength(nanometers), angle(rad), bias(px) and width(px). \n",
    "During the attack those parameters are optimised in order to achieve prediction change. \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os \n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.image as mimg\n",
    "from PIL import Image\n",
    "from art.attacks.evasion.laser_attack.laser_attack import \\\n",
    "    LaserBeamAttack, LaserBeam, LaserBeamGenerator, ImageGenerator\n",
    "from art.attacks.evasion.laser_attack.utils import add_images"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define minimal and maximal laser beam properties and create generator responsible for generation adversarial objects\n",
    "\n",
    "minimal:\n",
    "- wavelength: 380 nm\n",
    "- angle: 0 rad\n",
    "- bias: 0 px\n",
    "- width: 0px\n",
    "\n",
    "maximal:\n",
    "- wavelength: 780 nm\n",
    "- angle: pi rad\n",
    "- bias: 32 px\n",
    "- width: 32 px"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "min_lb = LaserBeam.from_array([380, 0, 0, 0])\n",
    "max_lb = LaserBeam.from_array([780, 3.14, 32, 32])\n",
    "lb_gen = LaserBeamGenerator(min_lb, max_lb, 0.2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create instance of image generator that is responsible for generation of images with adversarial objects on them"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "img_gen = ImageGenerator()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "generated_img = img_gen.generate_image(lb_gen.random(), (64,32,3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Image of random laser beam based on previous parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fd3dbf99a60>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(generated_img)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Cifar10 model will be used to present the attack"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Constants"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "CLASSES = [\n",
    "    \"airplane\",\n",
    "    \"automobile\",\n",
    "    \"bird\",\n",
    "    \"cat\",\n",
    "    \"deer\",\n",
    "    \"dog\",\n",
    "    \"frog\",\n",
    "    \"horse\",\n",
    "    \"ship\",\n",
    "    \"truck\"\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "IMAGE_SIZE = (32, 32)\n",
    "IMAGE_SHAPE = (*IMAGE_SIZE, 3)\n",
    "REAL_CLASS = 9"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'truck'"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "CLASSES[REAL_CLASS]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Helper functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rescale_image(image: np.ndarray, desired_size=IMAGE_SIZE):\n",
    "\timage_uin8 = (image*255).astype(np.uint8)\n",
    "\timg = Image.fromarray(image_uin8).resize(IMAGE_SIZE)\n",
    "\treturn np.array(img)/255"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def load_image(seeken_class):\n",
    "\tidx = np.where(y_test == seeken_class)[0][0]\n",
    "\treturn x_test[idx]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict_image_class(image, model):\n",
    "\timage_expanded = np.expand_dims(image, 0)\n",
    "\treturn model.predict(image_expanded)\n",
    "\t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_results(\n",
    "\treal_image_and_class, \n",
    "\tadversarial_image_and_class, \n",
    "\tfigsize=IMAGE_SIZE, \n",
    "\tclasses=CLASSES\n",
    "):\n",
    "\tfigure = plt.figure(figsize=figsize)\n",
    "\tfor i, record in enumerate(\n",
    "\t\t[\n",
    "\t\t\t(*real_image_and_class, \"Real\"), \n",
    "\t\t\t(*adversarial_image_and_class, \"Adversarial\"),\n",
    "\t\t\t(load_image(adversarial_image_and_class[1]), adversarial_image_and_class[1], \"Confused with:\")\n",
    "\t\t]\n",
    "\t):\n",
    "\t\timage, image_class_number, title = record\n",
    "\t\timage_class = classes[image_class_number]\n",
    "\t\tfigure.add_subplot(1,3, i+1)\n",
    "\t\tplt.imshow(image)\n",
    "\t\tplt.title(title, fontsize=32)\n",
    "\t\tplt.xlabel(image_class, fontsize=32)\n",
    "\tplt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Prepare dataset and model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow.keras.datasets import cifar10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, y_train), (x_test, y_test) = cifar10.load_data()\n",
    "x_train = x_train/255.\n",
    "x_test = x_test/255."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = tf.keras.models.load_model(\"../cifar10/neptune/cifar10v2.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fd3d0508850>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(x_train[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "truck = x_train[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction = predict_image_class(truck, model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "predicted_class = prediction.argmax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'truck'"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "CLASSES[predicted_class]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Check correctness of the prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predicted_class == REAL_CLASS"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Attack"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.channels_first = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "attack = LaserBeamAttack(\n",
    "    estimator=model, \n",
    "    iterations=50,\n",
    "    max_laser_beam=(780, 3.14, 32, 32)\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "adversarial_images = attack.generate(\n",
    "\tx=np.expand_dims(truck, axis=0)\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fd3465b4310>"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(adversarial_images[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "adv_pred = model.predict(np.expand_dims(adversarial_images[0], 0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Result: Success! Truck confused with bird!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'bird'"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "CLASSES[adv_pred.argmax()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Generate laser parameters instead of images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "adversarial_laser, adversarial_class = attack.generate_parameters(\n",
    "\tx=np.expand_dims(truck, axis=0)\n",
    ")[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "adversarial_laser_image = ImageGenerator().generate_image(adversarial_laser, shape=IMAGE_SHAPE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fd3464dc7c0>"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(adversarial_laser_image)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fd3463ec940>"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "adversarial_image = add_images(truck, adversarial_laser_image)\n",
    "plt.imshow(adversarial_image)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 2304x2304 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_results(\n",
    "\t(truck, predicted_class),\n",
    "\t(adversarial_image, adversarial_class)\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "1ab2e567bea62b0f94d37eb2da1a9f18e8495f2efc076376429c737530eecbb3"
  },
  "kernelspec": {
   "display_name": "Python 3.8.5 64-bit ('ai': conda)",
   "name": "ai"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}